import axios from 'axios'
import type { AxiosInstance } from 'axios'

const isDev: boolean = process.env.NODE_ENV == 'development'

const request: AxiosInstance = axios.create({
    baseURL: isDev ? 'http://162.14.108.31:3001/api' : 'http://121.89.205.189:3000/api',
    // baseURL: isDev ? 'http://10.31.155.4:3000/api' : 'http://121.89.205.189:3000/api',
    timeout: 60000,
})
//自定义加载图标···
import { showLoadingToast, closeToast } from 'vant';
// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么  设置token
    // config.headers['token'] = localStorage.getItem('token')  || '';
    showLoadingToast({
        message: '加载中...',
        forbidClick: true,
        loadingType: 'spinner',
        duration: 6000,
    });
    config.headers.token = localStorage.getItem('token') || '';
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {

    /*   if(response.data.code == 10119){
          // 获取路径信息，然后如果是详情在重新拿下数据  思路！！！
          // window
          console.log(11111,window);
           // 获取路径信息
           const path = window.location.pathname;  // 获取当前路径
           console.log('当前路径:', path);
   
           // 判断是否是详情页面（根据具体需求判断路径格式）
           if (path.includes('/detail')) {
               // 如果是详情页面，重新请求数据
               // 例如，假设你有一个函数可以获取详细数据：
               const id = path.split('/').pop();  // 假设详情页的 ID 是路径的最后一部分
               console.log('详情页 ID:', id);
   
               // 调用 API 获取详情数据
               request.get(`/api/details/${id}`)
                   .then(detailResponse => {
                       console.log('获取详情数据成功:', detailResponse);
                       // 可以根据返回的数据更新页面状态
                   })
                   .catch(error => {
                       console.error('获取详情数据失败:', error);
                   });
           }
          
      } */
    // 关闭加载
    closeToast()
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    if (response.data.data) {//用于首4个页面信息展示

        return response.data;
    } else {//注册和登录的时候res.data只有一层
        console.log('bbbbbbbbbbb');

        return response;
    }


}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
});
interface iConfig {
    url: string,
    data?: any,
    headers?: any,
    method?: string,
}
export default function ajax(config: iConfig) {

    const { url = '', data = {}, headers = {}, method = 'get' } = config

    switch (method.toUpperCase()) {
        case 'GET':
            return request.get(url, { params: data });
        case 'POST':

            if (headers['content-type'] == 'application/x-www-form-urlencoded') {
                const obj = new URLSearchParams()
                for (const key in data) {
                    obj.append(key, data[key])
                }
                return request.post(url, obj, { headers })
            }
            if (headers['content-type'] == 'multipart/form-data') {
                const obj = new FormData()
                for (const key in data) {
                    obj.append(key, data[key])
                }
                return request.post(url, obj, { headers })
            }
            return request.post(url, data)
        case 'DELETE':
            return request.delete(url, { data })
        case 'PUT':
            return request.put(url, data)
        case 'PATCH':
            return request.patch(url, data)
        default:
            return request.request(config)
    }
}